安裝方式我們使用官方提供的docker image,作為本次30天學習使用。
上面提供了許多設定方式,挑選docker-compose,在本機啟動。
version: '3'
services:
some-scylla:
image: scylladb/scylla
container_name: some-scylla
some-scylla2:
image: scylladb/scylla
container_name: some-scylla2
command: --seeds=some-scylla
some-scylla3:
image: scylladb/scylla
container_name: some-scylla3
command: --seeds=some-scylla
執行結果
cqlsh 是 CASSANDRA 提供的資料庫管理工具,使用此工具,可以執行cql語法,對資料庫做操作。
再強調一次,SCYLLA 完全兼容CASSANDRA,使用的也是cql,學習使用cql對於SCYLLA和CASSANDRA操作沒有任何差異。
並不像MySQL與MSSQL,屬於T-SQL,但使用上的語法和方式還是有些不同。
SCYLLA和CASSANDRA 吃的cql是一模一樣的。
docker hub 的 SCYLLA 官網頁面也直接提供執行cqlsh的方式
$ docker exec -it some-scylla cqlsh
預設配置的port號是9042,這點CASSANDRA和SCYLLA是一樣的
在cqlsh 下HELP指令,就可以看到command的指令有哪些
cql 的指令不分大小寫
。
nodetool 是另外一個在CASSANDRA/SCYLLA非常重要的東西,SCYLLA官網也表明SCYLLA 的nodetool是從CASSANDRA fork 出來的工具。
那個nodetool 是做什麼用的呢?很簡單,方便開發者查詢node,以及下node層級使用的工具,這類的需求並不會被歸類在cqlsh裡面。
如下列指令,就是查看目前node目前狀態
$ docker exec -it some-scylla nodetool status
所謂的node 就是叢集(cluster)的節點,在這邊就要介紹一下分散式DB與關聯式DB,想法上天大的不同。
先不要想關聯式DB有做replication,拉出master-slave,就最單純的情況來看,關聯式DB建置通常就一台。
而分散式DB基本上就是多台起手,所以上面在安裝時,才在docker compose 一次掛上了3台SCYLLA,每一台就是一個node,多個node可以配置成一個叢集(cluster)。
所以想當然爾,某一台SCYLLA環境出了狀況,當然是看node的狀況,就不會是cql處理這個層面的問題,因此nodetool 對於管理CASSANDRA/SCYLLA是不可或缺的。
如果一邊動手操作的朋友,可能會像我一樣發現實際執行情形,怎麼好像跟官網上寫的執行結果稍微有點出入。
Test Cluster
好像不見了
於是動手查證一下,關於cluster設定的位置,上面寫著放在機器內的位置 /etc/scylla/scylla.yaml
。
進到機器裡面,的確有這個yaml檔案,查看一下,應該只是被註解名稱而已。
雖然在cql裡面,下指令describe cluster沒有找到cluster名稱。
參考官網的docker使用範例,找到兩個可以驗證的指令。
一個是在cql下撈取cluster名稱,這點跟關聯式DB的概念雷同,DB的資料庫、資料表名稱等等,其實是可以select抓來看的,如下圖有個1 row的結果。
SELECT cluster_name FROM system.local;
一個就是使用nodetool,用nodetool 查看cluster的描述訊息。
$ docker exec -it some-scylla nodetool describecluster
在開始真正玩SCYLLA 語法與資料操作之前,筆者接下來幾篇,先著重介紹架構與概念的部分。
會選擇NoSQL作為DB使用,一定是希望應用場景,在使用NoSQL DB能夠發揮更好的效益。
工作實務上無端把關聯式DB丟到一邊好好的不用,到頭來只是自討苦吃而已。
小小提醒一下,不要因為興趣或著覺得很潮,而把會正式上線的系統沒有理由地,直接選用NoSQL作為DB。
最好要經過評估,了解優缺點後再決定使用。